In [1]:
%pylab inline
import numpy as np #  convert list to array

import matplotlib.pyplot as plt
from ipywidgets import *  #interaktivitáshoz szükséges függvények
from mpl_toolkits.mplot3d import * #3D-s ábrák alcsomagja

#from scipy import special 
from scipy.special import jn,fresnel

from scipy.integrate import * # az integráló rutinok betöltése
Populating the interactive namespace from numpy and matplotlib

Egyenlő szárú háromszög alakú rés

Az alapon fekvő szög $\alpha$, és az alap hossza egységnyi.

$U(u,v) = \int_{\mathrm{apertura}} \, dx dy \, e^{i 2\pi (u x + v y)} = 2\left[\frac{u \cos\frac{u}{2} \mathrm{ctg} \alpha + i v \sin\frac{u}{2} }{u v^2-u^3 \mathrm{ctg}^2 \alpha}+ \frac{\mathrm{ctg} \alpha \, e^{i\frac{v}{2} \mathrm{tg} \alpha}}{u^2 \mathrm{ctg}^2 \alpha - v^2} \right]$

In [2]:
def haromszog_amp_exact(u,v,szog): # az alapon fekvő szög: 'szog'
   
    tmp1 = 2*(u*cos(u/2)/tan(szog)+1j*v*sin(u/2))/(u*v**2-u**3/(tan(szog))**2)
    tmp2 = 2*(1/tan(szog)*exp(1j*v/2*tan(szog)))/(u**2/(tan(szog))**2-v**2)
    
    amp = tmp1+tmp2         
    amp2=abs(amp)**2
    
    return(amp,amp2)
In [3]:
def haromszog_racs(Nxy):
    
    a1, a2 = [1/Nxy, 0],[1/2/Nxy,sqrt(3)/2/Nxy]

    xh = []
    yh = []
    for n1 in range(Nxy+1):
        for n2 in range(Nxy-n1+1):
            xh.append(n1*a1[0] + n2*a2[0])
            yh.append(n1*a1[1] + n2*a2[1])
            
    return(xh,yh)   
In [4]:
xh, yh = haromszog_racs(10)

plot(xh,yh,'bs',ms=5)
grid();
In [5]:
haromszog_amp_exact(1,2,pi/3)
Out[5]:
((0.3269290304235165+0.2121768971050319j), 0.15190162659877987)
In [6]:
N_uv = 500  #  a (kx,ky) mintaveteli szama kx es ky menten, kulon-kulon
xyr = 50.0 # maximalis kx,ky tartomany, -xyr < kx,ky < xyr

u,v = meshgrid(linspace(-xyr,xyr,N_uv),linspace(-xyr,xyr,N_uv)) #mintavételezési pontok legyártása
amp,amp2 = haromszog_amp_exact(u,v,pi/2*0.8)

figsize(8,6)

subplot(1,1,1,aspect=1)

intmax=0.001  # intmax=0.001
contourf(u,v,amp2,levels=linspace(0.,intmax,10),cmap='viridis')

title('Háromszög alakú rés',fontsize=16);
xlabel(r'$u$',fontsize=20);
ylabel(r'$v$',fontsize=20);
In [7]:
N_uv = 500  #  a (kx,ky) mintaveteli szama kx es ky menten, kulon-kulon
xyr = 50.0 # maximalis kx,ky tartomany, -xyr < kx,ky < xyr

u,v = meshgrid(linspace(-xyr,xyr,N_uv),linspace(-xyr,xyr,N_uv)) #mintavételezési pontok legyártása
amp,amp2 = haromszog_amp_exact(u,v,pi/3)

figsize(8,6)

subplot(1,1,1,aspect=1)

intmax=0.001
contourf(u,v,amp2,levels=linspace(0.,intmax,10),cmap='gray')

title('Háromszög alakú rés',fontsize=16);
xlabel(r'$u$',fontsize=20);
ylabel(r'$v$',fontsize=20);
In [8]:
N_uv=500
xyr = 100.0 # maximalis kx,ky tartomany, -xyr < kx,ky < xyr

v=linspace(-xyr,xyr,N_uv)
amp,amp2 = haromszog_amp_exact(1.0*(-8),v,pi/3)

plot(v,amp2);
grid()
In [9]:
def haromszog_play(szog, xyr, intmax, N_uv):
    # N_uv = 500  #  a (kx,ky) mintaveteli szama kx es ky menten, kulon-kulon
    # xyr = 50.0 # maximalis kx,ky tartomany, -xyr < kx,ky < xyr

    u,v = meshgrid(linspace(-xyr,xyr,N_uv),linspace(-xyr,xyr,N_uv)) #mintavételezési pontok legyártása
    epsi = +10**(-8)
    amp,amp2 = haromszog_amp_exact(u+epsi,v,szog*pi/180)

    figsize(8,6)

    subplot(1,1,1,aspect=1)

    #intmax=0.001
    contourf(u,v,amp2,levels=linspace(0.,intmax,10),cmap='gray')

    title('Háromszög alakú rés',fontsize=16);
    xlabel(r'$u$',fontsize=20);
    ylabel(r'$v$',fontsize=20);

    show();
In [10]:
interact(haromszog_play,
          szog=FloatSlider(min=5,max=95,step=5,value=60,description=r'$\alpha$'),
          xyr=FloatSlider(min=50,max=100,step=10,value=50,description='xyr'),
          intmax=FloatSlider(min=0.0001,max=0.002,step=0.0001,value=0.001,description='Max int'),
          N_uv=IntSlider(min=100,max=500,step=100,value=200,description='N_uv')
        );

Körgyűrű

Belső sugár: $R_1$, külső sugár: $R_2$ és $R_1/R_2 < 1$, a külső sugár rögzített.

$U(\vartheta) = 2 \frac{x_2 J_1(x_2)-x_1 J_1(x_1)}{x_2^2},$ ahol $x_1 = k R_1 \sin\vartheta$ és $x_2 = k R_2 \sin\vartheta$.

Ha $R_1 \to 0$, akkor $U(\vartheta) = \frac{2 J_1(x_2)}{x_2}$.

In [11]:
def int_kor(x):             # egy kor alaku res amplitudoja, intenzitasa
    tmp = 4*(jn(1,x)/x)**2  
    return(tmp)

def int_korgyuru(x1,x2):   # korgyuru alaku res amplitudoja, intenzitasa
    amp = 2*(x2*jn(1,x2)- x1*jn(1,x1))/x2**2
    amp2=(abs(amp))**2
    return(amp,amp2)
In [12]:
3.8317/pi, 7.0156/pi
Out[12]:
(1.2196679908904309, 2.233134837511002)
In [13]:
Nminta = 500  #  a (kx,ky) mintaveteli szama kx es ky menten, kulon-kulon
R1pR2= 0.87   

R2=1
R1=0.15  # R1 < R2 
R1pR2 = R1/R2  #  R_1/R_2 <= 1

print("első minimum = sqrt(u_1^2+v1^2)= ", 1.22/2/R2)
print("második minimum = sqrt(u_1^2+v1^2)= ", 2.233/2/R2)


xyr = 3.0 # 12.1 # maximalis kx,ky tartomany, -xyr < kx,ky < xyr

epsi=10**(-7)  # azert kell,mert a kor alaku res intenzitasa divergal a kx=ky=0-nal, 
               # csak hataresetben ad helyes erteket.

u,v = meshgrid(linspace(-xyr,xyr,Nminta),linspace(-xyr,xyr,Nminta)) #mintavételezési pontok legyártása
amp2kor=int_kor(2*pi*R2*sqrt((u+epsi)**2+v**2)) #függvény kiértékelés

figsize(14,8)   
#figsize(xfig_meret,yfig_meret)

subplot(1,2,1,aspect=1)

intmax=0.005
contourf(u,v,amp2kor,levels=linspace(0.,intmax,10),cmap='gray')
title('Egy kör alakú rés\n'+ r'$R_2 = $'+ str(R2),fontsize=16);
xlabel(r'$u$',fontsize=20);
ylabel(r'$v$',fontsize=20);

 
#print("első minimum = sqrt(u_1^2+v1^2)= ", 1.22/2/Rpa)

#xyr = 7.0 # 12.1 # maximalis kx,ky tartomany, -xyr < kx,ky < xyr

u,v = meshgrid(linspace(-xyr,xyr,Nminta),linspace(-xyr,xyr,Nminta)) #mintavételezési pontok legyártása
qq1=2*pi*R1*sqrt((u+epsi)**2+v**2)
qq2=2*pi*R2*sqrt((u+epsi)**2+v**2)

amp, amp2 = int_korgyuru(qq1,qq2) #függvény kiértékelés

figsize(12,8)   
#figsize(xfig_meret,yfig_meret)

subplot(1,2,2,aspect=1)

intmax=0.005
contourf(u,v,amp2,levels=linspace(0.,intmax,10),cmap='gray')
title('Korgyuru alakú rés \n' + r'$R_1= $'+ str(R1) + r'  $R_2 = $'+ str(R2),fontsize=16);
xlabel(r'$u$',fontsize=20);
ylabel(r'$v$',fontsize=20);
első minimum = sqrt(u_1^2+v1^2)=  0.61
második minimum = sqrt(u_1^2+v1^2)=  1.1165
In [14]:
Nminta = 200  #  a (kx,ky) mintaveteli szama kx es ky menten, kulon-kulon
R1pR2= 0.87   

R2=1
R1=0.15  # R1 < R2 
R1pR2 = R1/R2  #  R_1/R_2 <= 1

print(r'$R_2$ sugarú körre az első minimum = sqrt(u_1^2+v1^2)= ', 1.22/2/R2)
print(r'$R_2$ sugarú körre az második minimum = sqrt(u_1^2+v1^2)= ', 2.233/2/R2)


xyr = 3.0 # 12.1 # maximalis kx,ky tartomany, -xyr < kx,ky < xyr

epsi=10**(-7)  # azert kell,mert a kor alaku res intenzitasa divergal a kx=ky=0-nal, 
               # csak hataresetben ad helyes erteket.

u = linspace(-xyr,xyr,Nminta)
v=0

qq1=2*pi*R1*sqrt((u+epsi)**2+v**2)
qq2=2*pi*R2*sqrt((u+epsi)**2+v**2)

amp, amp2 = int_korgyuru(qq1,qq2) #függvény kiértékelés

figsize(12,6)   
#figsize(xfig_meret,yfig_meret)

subplot(1,2,2)

intmax=0.005
plot(u,amp2,'b-')
title('Korgyuru alakú rés \n' + r'$R_1= $'+ str(R1) + r'  $R_2 = $'+ str(R2),fontsize=16);
xlabel(r'$u$',fontsize=20);
ylabel(r'$v$',fontsize=20);

grid();
$R_2$ sugarú körre az első minimum = sqrt(u_1^2+v1^2)=  0.61
$R_2$ sugarú körre az második minimum = sqrt(u_1^2+v1^2)=  1.1165